import java.io.Serializable;
import java.util.Observable;
import java.util.HashSet;

/**
 * Classe de gestion d'ouvrage.
 * @author FABIEN/ALEXANDRE
 * @version 2.0
 */

public abstract class Documents extends Observable implements Serializable  {


	//************************************************************************************************************
	// Attributs
	// ************************************************************************************************************    

    private static final long serialVersionUID = 1L;
    private String _titre;
    private HashSet<Auteur> _auteurs;
    private HashSet<MotsCles> _motsCles;

	//************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************
     
	/**
	 * Constructeur. 
	 * @param titre			titre du document
	 * @param motsCles      les mots clés du document
	 * @param auteurs		editeur de l'ouvrage

	 */
   
		public Documents(String titre,HashSet<Auteur> auteur,HashSet<MotsCles> motsCles) {
				
			this.setTitre(titre);
		    this.setMotsCles(motsCles);
		    this.setAuteurs(auteur);
		    
		        for (MotsCles m :motsCles) 
			        {
			         m.lierDocument(this);
			        }
		        for (Auteur a : auteur)
			        {
			         a.lierDocument(this);
			        }
		    }// Fin Constructeur




	// ************************************************************************************************************
	// Méthodes publics
	// ************************************************************************************************************
	
	// ------------------------------------------------------------------------------------------------------------
	// Affecteurs

	/**
     * setter de l'attribut titrre
     * @param titre valeur   affecter   le titre au document
     */


	public void setTitre(String titre){
	_titre = titre;
	} 
	
	/**
	 * setter de l'attrribut motsCles (ensemble des mots de clés du document)
     * @param motsCles HashSet de MotsCles
     */

	public void setMotsCles(HashSet<MotsCles> motsCles) {
	    _motsCles = motsCles;
	}
	
	/**
     * setter de l'attrribut auteurs (ensemble des auteurs du document)
     * @param auteurs HashSet de auteurs.
     */

	public void setAuteurs(HashSet<Auteur> auteurs) {
	    _auteurs = auteurs;
	}
	
	
	// ------------------------------------------------------------------------------------------------------------
	// Getteurs
	
	
	public String getTitre(){
	return _titre;
	} 
	
	public HashSet<MotsCles> getMotsCles(){
	 return _motsCles;
	} 
	
	public HashSet<Auteur> getAuteurs(){
	return _auteurs;
	} 

	//************************************************************************************************************
	//********************************GETTEUR POUR RECHERCHE MOTS CLES ET AUTEURS*********************************
	
	public MotsCles getMotsCles(MotsCles MotsCles) {
	    MotsCles trouve = null;
	    for (MotsCles mt : getMotsCles()) {
	        if (mt.getMot().equals(MotsCles.getMot())) {
	            trouve = mt;
	        }
	    }
	    return trouve;
	}
	
	public Auteur getAuteur(String nom, String prenom) {
	    Auteur trouve = null;
	    for (Auteur auteur : getAuteurs()) {
	        if ((auteur.getNom().contains(nom) && prenom.equals(""))|| (auteur.getPrenom().equals(prenom) && auteur.getNom().contains(nom))) {
	            trouve = auteur;
	        }
	    }
	    return trouve;
	}
	
	//************************************************************************************************************
	//Lier Auteur/MotsCles
	//************************************************************************************************************
	
	public void lierAuteur(Auteur auteur) {
	    _auteurs.add(auteur);
	}
	
	public void lierMotsCles(MotsCles MotsCles) {
	    _motsCles.add(MotsCles);
	}
	



}

